package com.github.common.database.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Signature;
import org.springframework.stereotype.Component;


/**
 * 拦截Executor类的update方法。
 * 检查SQL命令类型是否为INSERT。
 * 如果是INSERT操作，则根据参数类型（单个或批量）生成主键值并设置到对象中。
 * 使用DistributedId注解标识需要自动生成主键的字段。
 * 调用segmentFeignClient获取分布式ID，并将其设置到对象的相应字段中。
 * 分点描述：
 * 拦截update方法并检查SQL类型。
 * 对于单个插入操作，直接生成主键。
 * 对于批量插入操作，遍历列表中的每个元素并为其生成主键。
 */
@Slf4j
@Component
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
public class GeneratedKeyInterceptor implements Interceptor {

    /**
     * 单个插入名称
     */
    private static final String SAVE = "save";

    /**
     * 批量插入名称
     */
    private static final String BATCH_SAVE = "saveBatch";

    /**
     * 批量插入名称
     */
    private static final String BATCH_INSERT = "insertBatch";









    /**
     *
     * @param invocation
     * @return
     * @throws Throwable
     */
    public Object intercept(Invocation invocation) throws Throwable {
        return null;
    }
































}
